#include <iostream>
#include <queue>
#include <cstring>
using namespace std;
const int N=8*1e4+10;

int h[N],ne[N],to[N],idx;
int n,m;
int depth[N];
int fa[N][16];
void add(int x,int y)
{
	ne[idx]=h[x];
	h[x]=idx;
	to[idx]=y;
	idx++;
}
void bfs(int u)
{
	memset(depth,0x3f3f3f3f,sizeof(depth));
	depth[0]=0;
	depth[u]=1;
	queue<int> q;
	q.push(u);
	while(q.size())
	{
		int x=q.front();
		q.pop();
		for(int i=h[x];~i;i=ne[i])
		{
			int y=to[i];
			if(depth[y]>depth[x]+1)
			{
				depth[y]=depth[x]+1;
				fa[y][0]=x;
				for(int j=1;j<=15;j++)
				{
					fa[y][j]=fa[fa[y][j-1]][j-1];
				}
				q.push(y);
			}
		}
	}
}
int lca(int x,int y)
{
	if(depth[x]<depth[y])
		swap(x,y);
	
	for(int i=15;i>=0;i--)
	{
		if(depth[fa[x][i]]>=depth[y])
		{
			x=fa[x][i];
		}
	}
	if(x==y)
		return x;
	for(int i=15;i>=0;i--)
	{
		if(fa[x][i]!=fa[y][i])
		{
			x=fa[x][i];
			y=fa[y][i];
		}
	}
	return fa[x][0];
}
int main()
{
	cin>>n;
	memset(h,-1,sizeof(h));
	int root=-1;
	for(int i=0;i<n;i++)
	{
		int a,b;
		scanf("%d%d",&a,&b);
		if(b==-1)
			root=a;
		else{
			add(a,b);
			add(b,a);
		}
	}
	bfs(root);
	
	
	cin>>m;
	while(m--)
	{
		int a,b;
		scanf("%d%d",&a,&b);
		
		int p=lca(a,b);
		if(p==a)
			cout<<1<<endl;
		else if(p==b)
			cout<<2<<endl;
		else
			cout<<0<<endl;
	}
	return 0;
}
